﻿using Chaotic.Module.DBTool.ViewModels;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using Telerik.Windows.Controls.FieldList;
using Telerik.Windows.Controls.SyntaxEditor.UI;

namespace Chaotic.Module.DBTool.Views
{
    /// <summary>
    /// SqlContent.xaml 的交互逻辑
    /// </summary>
    public partial class SqlContent : UserControl
    {
        public SqlContent()
        {
            InitializeComponent();
            this.Loaded += SqlContent_Loaded;  
        }

 
        private void SqlContent_Loaded(object sender, RoutedEventArgs e)
        {
            if(this.DataContext is SqlContentViewModel viewModel)
            {    
                viewModel.SqlEditor = this.editor;
            }

            //隐藏行号
            var lineNumbersMargin = this.editor.Margins.ScrollableLeft.First();
            lineNumbersMargin.Visibility = Visibility.Collapsed;
        }


        public void SetFocus()
        {
            this.editor.Focus();
        }

        private void editor_DragEnter(object sender, DragEventArgs e)
        {
            HandleDragEvent(e);
        }

        private void editor_DragOver(object sender, DragEventArgs e)
        {
            HandleDragEvent(e);
        }
        private void HandleDragEvent(DragEventArgs e)
        {
            // 检查拖拽的数据是否包含文本或特定格式
            if (e.Data.GetDataPresent(DataFormats.Text) ||
                e.Data.GetDataPresent(DataFormats.UnicodeText)) 
            {
                // 设置拖放效果为“复制”
                e.Effects = DragDropEffects.Copy;
                this.editor.Focus();
                Point point = e.GetPosition(editor);
                CaretPosition caretPosition = editor.GetPositionFromPoint(point);
                editor.CaretPosition.MoveToPosition(caretPosition);
            }
            else
            {
                // 如果不支持的数据格式，则设置为“无”
                e.Effects = DragDropEffects.None;
            } 
        }

        private void editor_Drop(object sender, DragEventArgs e)
        {
            // 1. 获取拖放的文本数据
            string droppedText = null;
            if (e.Data.GetDataPresent(DataFormats.Text))
            {
                droppedText = e.Data.GetData(DataFormats.Text) as string;
            }
            else if (e.Data.GetDataPresent(DataFormats.UnicodeText))
            {
                droppedText = e.Data.GetData(DataFormats.UnicodeText) as string;
            }
            //  else if 检查其他格式...

            if (string.IsNullOrEmpty(droppedText))
            {
                return; // 如果没有获取到文本，则直接返回
            }

            // 2. 获取编辑器光标位置（插入点）
            // 注意：需要将屏幕坐标转换为编辑器内的文本位置（行和列）
            var dropPoint = e.GetPosition(this.editor); // 获取相对于SyntaxEditor的坐标
                                                        // RadSyntaxEditor可能没有直接通过点击位置获取Caret索引的方法，可能需要一些计算
                                                        // 一种常见做法是：如果无法精确计算到字符索引，则可以插入到当前Caret位置或选择区域
                                                        // 这里以插入到当前光标处为例：
          

            var currentCaretIndex = editor.CaretPosition.Index; // 或使用Document.CaretPosition

            // 否则在光标处插入文本
            editor.Document.Insert(currentCaretIndex, droppedText);


            e.Handled = true;
        }

      
    }
}
